package com.pb.infra.oth.util;

import java.math.BigDecimal;
import java.security.SecureRandom;
import java.util.Locale;

/**
 * 字符串工具类
 *
 * @author 金洋
 * @date 2019/8/7
 */
public class StringUtil {

    /**
     * 禁用无参构造器
     */
    private StringUtil() {
        throw new IllegalStateException("Utility class");
    }

    /**
     * 判断是否为NULL
     * @param obj obj
     * @return String 返回值
     */
    public static String isNull(Object obj) {
        return obj == null ? "" : obj.toString();
    }

    /**
     * 判断对象是否为空
     *
     * @param obj 目标对象
     * @return boolean 判断结果
     */
    public static boolean isEmpty(Object obj) {
        return obj == null || "".equals(obj);
    }

    public static boolean isBoolean(String obj) {
        boolean res = false;
        switch (obj.toUpperCase(Locale.ENGLISH)) {
            case "TRUE":
            case "FALSE":
                res = true;
                break;
            default:
                break;
        }
        return res;
    }

    /**
     * 从第一个字符开始截取字符串
     * @param str 待截取字符串
     * @param length 截取长度
     * @return 截取后字符串
     */
    public static String subStr(String str, int length) {
        return str.length() > length ? str.substring(0, length) : str;
    }

    /**
     * 判断字符串内容是否数字（正则表达式）
     * @param str 待处理字符串
     * @return boolean 结果
     */
    public static boolean isNumeric(String str){
        if( str.replace("-", "").matches("^[0-9]+$") ){
            return true;
        }
        if(str.replace("-", "").matches("\\d+.\\d+")){
            return true;
        }
        return false;
    }

    /**
     * 获取16进制随机数
     * @param len 生成长度
     * @return String 16进制随机数
     * @throws
     */
    public static String randomHexString(int len)  {
        try {
            StringBuffer result = new StringBuffer();
            SecureRandom random = SecureRandom.getInstance("SHA1PRNG");
            for(int i=0;i<len;i++) {
                result.append(Integer.toHexString(random.nextInt(16)));
            }
            return result.toString().toUpperCase(Locale.ENGLISH);
        } catch (Exception e) {
            // TODO: handle exception
            e.printStackTrace();

        }
        return null;
    }

    /**
     * 判断字符串内容是否数字（BigDecimal）
     * @param str 待处理字符串
     * @return boolean 结果
     */
    public static boolean isNum(String str) {
        try {
            new BigDecimal(str);
            return true;
        } catch (Exception e) {
            return false;
        }
    }

    /**
     * 为int左侧补0字符
     *
     * @param formatLength 补0后总长度
     * @param sourceIntValue 原int数值
     * @return String 左侧补0后字符串
     */
    public static String formatStrPadLeftZero(int formatLength, int sourceIntValue) {
        return String.format("%0" + formatLength + "d", sourceIntValue);
    }

    /**
     *@author 贾真行
     *@Description 数字转千分为符
     *@Date 10:23 2022/11/24
     *@Param
     *@Return
     **/
    public static String numberToBits(String number){
        String begin="";
        String end="";
        String[] num=number.split("\\.");
        if(num.length>1){
            begin=num[0];
            end=num[1];
        }else{
            begin=number;
        }
        return begin.replaceAll("(?<=\\d)(?=(?:\\d{3})+$)", ",")+"."+end;
    }

}
